package com.wk.springboot.parse;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.wk.springboot.configuration.LocalMessageTransaction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import java.lang.reflect.Method;


@Component
public class EndpointConfigParser {

    @Autowired
    private SpELParser spELParser;

    /**
     * 解析终端配置
     * @param annotation 消息注解
     * @param method 目标方法
     * @param args 方法参数
     * @return JSON配置字符串
     */
    public String parseEndpointConfig(LocalMessageTransaction annotation,
                                      Method method,
                                      Object[] args) throws Exception{
        String configSpEL = annotation.endpointConfigSpEL();
        if (StringUtils.isEmpty(configSpEL)) {
            return "{}";
        }

        try {
            return spELParser.parseSpEL(configSpEL, method, args);
        } catch (Exception e) {
            throw new Exception("终端配置解析失败", e);
        }
    }

    /**
     * 通用配置解析方法
     * @param configJson 配置JSON
     * @param configType 目标配置类型
     */
    public <T> T parseConfig(String configJson, Class<T> configType) throws Exception {
        try {
            return PayloadBuilder.objectMapper.readValue(configJson, configType);
        } catch (JsonProcessingException e) {
            throw new Exception("配置反序列化失败", e);
        }
    }
}